package com.company.multithreading;


/**
 * 单线程处理程序
 * **/
public class TestThread {

    public static void main(String[] args) {
        Hero gareen = new Hero();
        gareen.name = "盖伦";
        gareen.hp = 616;
        gareen.damage = 50;

        Hero teemo = new Hero();
        teemo.name = "提莫";
        teemo.hp = 300;
        teemo.damage = 30;

        Hero bh = new Hero();
        bh.name = "赏金猎人";
        bh.hp = 500;
        bh.damage = 80;

        Hero leesin = new Hero();
        leesin.name = "盲僧";
        leesin.hp = 455;
        leesin.damage = 80;

//        //盖伦攻击提莫
//        while (!teemo.isDead()){
//            gareen.attackHero(teemo);
//        }
//
//        //赏金猎人攻击盲僧
//        while (!leesin.isDead()){
//            bh.attackHero(leesin);
//        }
        /**多线程程序, 继承线程类***/
//        KillThread killThread1 = new KillThread(gareen, teemo);
//        killThread1.start();
//
//        KillThread killThread2 = new KillThread(bh, leesin);
//        killThread2.start();
        /**创建多线程-实现Runnable接口**/
//        Battle battle1 = new Battle(gareen, teemo);
//        new Thread(battle1).start();
//        Battle battle2 = new Battle(bh, leesin);
//        new Thread(battle2).start();
        /**匿名类**/
        Thread t1 = new Thread(){
            //匿名类中用到外部的局部变量teemo，必须把teemo声明为final
            //但是在JDK7以后，就不是必须加final
            public void run(){
                while (!teemo.isDead()){
                    gareen.attackHero(teemo);
                }
            }
        };
        t1.start();

        Thread t2 = new Thread(){
            public void run(){
                while (!leesin.isDead()){
                    bh.attackHero(leesin);
                }
            }
        };
        t2.start();

    }
    /**
     *创建多线程的三种处理方式
     * 继承Thread类
     * 实现Runnable接口
     * 匿名类的方式
     * 注 启动线程是start()方法， run()并不能启动一个新的线程。
     *
     * 创建的线程的方法:
     *  sleep 当前线程暂停 ------------- 线程沉睡
     *  join  加入到当前的线程中  ---------join 子线程
     *  setPriority 线程优先级 --------当线程处于竞争关系的时候，优先级高的线程会有更大的几率获得cpu资源。
     *  yield 临时暂停 ----------临时暂停，当前线程，临时暂停，是的其他的线程可以有更多的机会占用CPU资源。
     *  setDaemon 守护进程 -------守护进程的概念：当一个进程里，所有的线程都是都是守护线程的时候，结束当前线程。
     *  就好像一个公司有销售部，生产部这些和业务挂钩的部门。除此之外，还有后勤，行政等这些部门。如果一家 公司销售部，生产部解散了，
     *  那么只剩下了后勤和行政，那么这家公司也可以解散了。守护进程就相当于那些支持部门，如果一个进程只剩下守护进程，那么进程会自动结束。
     *  守护线程通常会被用来做日志，性能统计等工作。
     *
     * **/
}
